package random_test;

public class Test_10_3 {
    //9. 回文数
    public boolean isPalindrome(int x) {
        // 如果为负数 则一定不是回文数
        if(x < 0) return false;
        if(x == 0) return true;
        // 如果 x 是正数且 个位数为0，则一定不是回文数
        if(x % 10 == 0) return false;

        int y = 0;
        while(x >= y) {
            if(x == y) return true;
            y = y * 10 + x % 10;
            if(x == y) return true;
            x /= 10;
        }
        return false;
    }


    //12. 整数转罗马数字
    public String intToRoman(int num) {
        // 构造两个数组， 不同数组中，相同下标的元素一一对应
        String[] arr1 = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        int[] arr2 = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};

        StringBuilder stringBuilder = new StringBuilder();
        for(int i = 0; num > 0 && i < 13; ) {
            if(num >= arr2[i]) {
                String tmp = arr1[i];
                stringBuilder.append(tmp);
                num -= arr2[i];
            } else {
                i++;
            }
        }
        return stringBuilder.toString();
    }


    //13. 罗马数字转整数
    public int romanToInt(String s) {
        // 构造两个数组， 不同数组中，相同下标的元素一一对应
        String[] arr1 = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        int[] arr2 = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};

        int ret = 0;
        StringBuilder stringBuilder = new StringBuilder(s);
        for(int i = 0; stringBuilder.length() > 0 && i < 13;) {
            String tmp = arr1[i];
            // 该值为0 代表 找到了该字符串 对应的 值
            if(stringBuilder.indexOf(tmp) == 0) {
                ret += arr2[i];
                // 当找到最后一个元素时， delete方法不会进行任何操作，此时应该直接跳出循环
                if(tmp.length() == stringBuilder.length()) break;
                // ret 每加上一次数值， 即删除一次对应的字符串
                stringBuilder.delete(0, tmp.length());
            } else {
                i++;
            }
        }
        return ret;
    }
}
